package com.meter.common.utils;

import com.meter.common.constant.Constants;
import com.meter.common.utils.spring.SpringUtils;
import com.meter.redis.service.RedisService;
import org.springframework.stereotype.Service;

import java.util.Collection;

@Service("config")
public class ConfigUtils {

    /**
     * 根据键名查询参数配置信息
     *
     * @param configKey 参数键名
     * @return 参数键值
     */
    public String getKey(String configKey)
    {
        return ConfigUtils.getConfigCache(configKey).toString();
    }

    /**
     * 设置字典缓存
     *
     * @param key 参数键
     * @param value 参数值
     */
    public static void setConfigCache(String key, Object value)
    {
        SpringUtils.getBean(RedisService.class).set(getCacheKey(key), value);
    }

    /**
     * 获取参数缓存
     *
     * @param key 参数键
     * @return dictDatas 字典数据列表
     */
    public static Object getConfigCache(String key)
    {
        Object cacheObj = SpringUtils.getBean(RedisService.class).get(getCacheKey(key));
        if (StringUtils.isNotNull(cacheObj))
        {
            return cacheObj;
        }
        return null;
    }

    /**
     * 删除指定字典缓存
     *
     * @param key 字典键
     */
    public static void removeConfigCache(String key)
    {
        SpringUtils.getBean(RedisService.class).del(getCacheKey(key));
    }

    /**
     * 清空字典缓存
     */
    public static void clearConfigCache()
    {
        Collection<String> keys = SpringUtils.getBean(RedisService.class).keys(Constants.SYS_CONFIG_KEY + "*");
        SpringUtils.getBean(RedisService.class).del(keys);
    }

    /**
     * 设置cache key
     *
     * @param configKey 参数键
     * @return 缓存键key
     */
    public static String getCacheKey(String configKey)
    {
        return Constants.SYS_CONFIG_KEY + configKey;
    }
}
